package prjtgl.bdd.comptes;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.Query;
import prjtgl.bdd.HGeneral;
import prjtgl.metier.comptes.Membre;
import prjtgl.metier.comptes.Recruteur;
import prjtgl.metier.comptes.profil_utilisateur.DomaineExpertise;
import prjtgl.metier.comptes.profil_utilisateur.poste.Poste;

/**
 *
 * @author Lucie
 */
public class HRecruteur extends HGeneral {

	private static DateFormat dateFormat;

	static {
		dateFormat = new SimpleDateFormat("yyyyMMdd");
	}

	public List<Recruteur> listerTout(){
		session.beginTransaction();
		Query q = session.createQuery("from Recruteur");
		List<Recruteur> recruteurs = q.list();
		return recruteurs;
	}
	
	public Map<Membre, Integer> rechercheRessource(List<DomaineExpertise> domaines, String profilIntitule, int expMin, Date disponibilite) {

		Map<Membre, Integer> result = new HashMap<Membre, Integer>();

		session.beginTransaction();
		String query = "select m from Membre as m \n";
		query += "left outer join m.experiences as e \n";
		query += "left outer join e.profil as p \n";
		query += "left outer join m.domaines as d \n";
		query += "left outer join m.disponibilite as disp \n";
		String where = "where ";
		String and = "";

		if (domaines != null && domaines.size() > 0) {
			and = "and ";
			query += where;
			where = "";
			query += "(\n";
			int i = domaines.size();
			for (DomaineExpertise domaine : domaines) {
				if (i != domaines.size() && i > 0) {
					query += "\n or ";
				}
				query += "d.intitule='" + domaine.getIntitule() + "'";
				i--;
			}
			query += ") ";
		}
		if (profilIntitule != null && !profilIntitule.equals("")) {
			query += where;
			where = "";
			query += " " + and + "p.intitule='" + profilIntitule + "' ";
		}
		if (disponibilite != null) {
			query += " " + and + " (disp.permanent = true or ";
			query += "disp.date <= '" + dateFormat.format(disponibilite) + "')";
		}

		System.out.println(query);
		Query q = session.createQuery(query);
		List<Membre> membres = (List<Membre>) q.list();

		for (Membre m : membres) {
			if (expMin > 0) {
				if (m.calculerCumulExperiences() >= expMin) {
					result.put(m, 1);
				}
			} else {
				result.put(m, 1);
			}
		}

		return result;
	}
	
}
